
template<typename DataT,	//  缓存的数据类型
	 typename UpdateHandler, // 缓存失效时调用该函数来更新数据
	 typename TimeOutHandler> // 检测是否失效的函数
struct cached_data
{
	template<typename TimeT>
	cached_data(const TimeT &p_lifetime)
		: m_timeout_handler(p_lifetime) {}

	DataT get() const {
		if (m_timeout_handler()) { // false, is dead, do update
			m_update_handler();
			// reset timeout;
		}
		return m_data;
	}

	DataT update() const {
		m_update_handler();
	}

	DataT m_data;
	TimeOutHandler m_timeout_handler;
	UpdateHandler m_update_handler;
};
